package com.example.myapplication12_1;

import android.content.Context;
import android.graphics.Canvas;
import android.graphics.Color;
import android.graphics.Paint;
import android.os.Handler;
import android.os.Looper;
import android.util.AttributeSet;
import android.view.View;

public class BallView extends View {
    // 小球的初始位置
    private float x = 200; // 横坐标
    private float y = 200; // 纵坐标
    private int radius = 50; // 小球半径

    // 绘制工具
    private Paint paint; // 画笔
    private Handler handler; // 控制定时刷新的工具
    private boolean isMoving = false; // 是否正在移动
    private Runnable moveTask; // 移动任务对象

    // 构造方法（Android系统会自动调用）
    public BallView(Context context) {
        super(context);
        init();
    }

    public BallView(Context context, AttributeSet attrs) {
        super(context, attrs);
        init();
    }

    public BallView(Context context, AttributeSet attrs, int defStyleAttr) {
        super(context, attrs, defStyleAttr);
        init();
    }

    // 初始化画笔和定时器
    private void init() {
        // 创建画笔并设置抗锯齿
        paint = new Paint();
        paint.setAntiAlias(true); // 让图形边缘更平滑

        // 创建主线程处理器（用于定时刷新界面）
        handler = new Handler(Looper.getMainLooper());
    }

    // 重写onDraw方法，负责在视图上绘制内容
    @Override
    protected void onDraw(Canvas canvas) {
        super.onDraw(canvas);

        // 1. 绘制黑色外圈
        paint.setColor(Color.BLACK); // 设置颜色为黑色
        paint.setStyle(Paint.Style.FILL); // 填充模式
        canvas.drawCircle(x, y, radius, paint); // 画外圈

        // 2. 绘制白色内圈
        paint.setColor(Color.WHITE); // 设置颜色为白色
        canvas.drawCircle(x, y, radius / 2, paint); // 画内圈（半径是外圈的一半）

        // 3. 绘制数字8
        paint.setColor(Color.BLACK); // 文字颜色为黑色
        paint.setTextSize(radius); // 设置文字大小与外圈半径相同
        paint.setTextAlign(Paint.Align.CENTER); // 文字水平居中

        // 计算文字垂直位置偏移量
        float textHeight = paint.descent() - paint.ascent(); // 文字总高度
        float textOffset = textHeight / 2 - paint.descent(); // 垂直居中偏移量

        // 在圆心位置绘制数字8
        canvas.drawText("8", x, y + textOffset, paint);
    }

    // 向上移动小球
    public void moveUp() {
        if (y - 10 >= radius) { // 防止超出屏幕顶部
            y -= 10; // y坐标减小
            invalidate(); // 触发重绘
        }
    }

    // 向下移动小球
    public void moveDown() {
        if (y + 10 <= getHeight() - radius) { // 防止超出屏幕底部
            y += 10; // y坐标增大
            invalidate();
        }
    }

    // 向左移动小球
    public void moveLeft() {
        if (x - 10 >= radius) { // 防止超出屏幕左侧
            x -= 10; // x坐标减小
            invalidate();
        }
    }

    // 向右移动小球
    public void moveRight() {
        if (x + 10 <= getWidth() - radius) { // 防止超出屏幕右侧
            x += 10; // x坐标增大
            invalidate();
        }
    }

    // 开始持续移动（按住按钮时调用）
    public void startContinuousMove(final MainActivity.ButtonAction moveAction) {
        if (!isMoving) { // 如果还没开始移动
            isMoving = true; // 标记为正在移动

            // 创建一个移动任务
            moveTask = new Runnable() {
                @Override
                public void run() {
                    if (isMoving) {
                        moveAction.run(); // 执行具体移动方向
                        handler.postDelayed(this, 50); // 每50毫秒重复执行
                    }
                }
            };

            handler.post(moveTask); // 启动任务
        }
    }

    // 停止持续移动（松开按钮时调用）
    public void stopContinuousMove() {
        isMoving = false; // 取消移动状态
        if (moveTask != null) {
            handler.removeCallbacks(moveTask); // 移除未完成的移动任务
        }
    }
}